//package com.io.ailauncher.view.wheelview;
//
//import android.content.Context;
//import android.content.res.TypedArray;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.graphics.Canvas;
//import android.graphics.Color;
//import android.graphics.Paint;
//import android.graphics.Point;
//import android.graphics.Rect;
//import android.util.AttributeSet;
//import android.util.Log;
//import android.view.LayoutInflater;
//import android.view.MotionEvent;
//import android.view.View;
//import android.view.ViewGroup;
//import android.widget.ImageView;
//import android.widget.TextView;
//
//import com.io.ailauncher.R;
//
//import java.util.ArrayList;
//import java.util.Collections;
//import java.util.List;
//
///**
// * 圆形菜单，按与圆心夹角滑动
// * 条目与圆心夹角一致
// * 2020/3/31 10:20
// *
// * @author LiuWeiHao
// * Email 872235631@qq.com
// */
//public class CircleListView extends ViewGroup {
//    private final String TAG = CircleListView.class.getName();
//    //子view之间的间隔角,圆可以放置的子控件个数
//    private static final double intervalAngel = 6;
//    /**
//     * 外圆半径
//     */
//    private int mOutWheelRadius;
//    /**
//     * 内圆半径
//     */
//    private int mInWheelRadius;
//    /**
//     * 条目中心点所在圆的半径
//     */
//    private int mItemCenterRadius;
//    private int mOffSetX;
//    private int mCenterX;//圆心的x轴坐标
//    private int mCenterY;//圆心的y轴坐标
//    private double angel = 0;//偏移角度
//    private float mLastY;//上一次触摸的y轴位置
//    private float mDownY;
//    private boolean isScrolling = false;//是否在滑动状态
//    private Bitmap mBitmapWheel = null;
//    private List<WheelItem> mDatas;
//    private int mMenuItemLayoutId = R.layout.circle_list_view_item;
//    private List<Point> mPointCenterList;
//    private List<Rect> mItemRectList;
//    private Paint mWeelPaint;
//    private Rect mBitmapWheelSrc;
//    private Rect mBitmapWheelDst;
//
//    public CircleListView(Context context) {
//        super(context);
//        setWillNotDraw(false);
//    }
//
//    public CircleListView(Context context, AttributeSet attrs) {
//        super(context, attrs);
//        setWillNotDraw(false);
//        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleListView);
//        mOutWheelRadius = typedArray.getDimensionPixelSize(R.styleable.CircleListView_outwheelRadius, 0);
//        mInWheelRadius = typedArray.getDimensionPixelSize(R.styleable.CircleListView_inWheelRadius, 0);
//        mItemCenterRadius = typedArray.getDimensionPixelSize(R.styleable.CircleListView_itemCenterRadius, 0);
//        mBitmapWheel = BitmapFactory.decodeResource(getResources(), typedArray.getResourceId(R.styleable.CircleListView_circleDrawable, 0));
//        mOffSetX = typedArray.getDimensionPixelSize(R.styleable.CircleListView_offSetX, 0);
//        typedArray.recycle();
//    }
//
//    public List<WheelItem> getDatas() {
//        return mDatas;
//    }
//
//    public void setDatas(List<WheelItem> datas) {
//        if (datas == null || datas.size() == 0) {
//            Log.e(TAG, "setDatas datas is null");
//            return;
//        }
//        angel = 0;
//        this.mDatas = datas;
//        refreshList();
////        setPosition(getMidSelect());
//    }
//
//    private int getMidSelect() {
//        int mid;
//        if (mDatas.size() % 2 == 1) {
//            mid = (mDatas.size() + 1);
//        } else {
//            mid = mDatas.size() / 2;
//        }
//        return mid;
//    }
//
//    @Override
//    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
//        measureChildren(widthMeasureSpec, heightMeasureSpec);
//        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
//    }
//
//
//    @Override
//    protected void onLayout(boolean changed, int l, int t, int r, int b) {
//        mCenterY = getHeight() / 2;
//        mCenterX = getWidth() + mOffSetX;
//        if (mPointCenterList == null) {
//            mPointCenterList = new ArrayList<>();
//        } else {
//            mPointCenterList.clear();
//        }
//        if (mItemRectList == null) {
//            mItemRectList = new ArrayList<>();
//        } else {
//            mItemRectList.clear();
//        }
//        if (mDatas == null || mDatas.size() == 0) {
//            Log.e(TAG, "setDatas datas is null");
//            return;
//        }
//        for (int i = 0; i < mDatas.size(); i++) {
//            View childView = getChildAt(i);
//            double childViewAngel = i * intervalAngel + angel + 90;
//            if (childViewAngel > 270 || childViewAngel < -90) {
//                continue;
//            }
//            int x = mCenterX - (int) (Math.sin(Math.toRadians(childViewAngel)) * mItemCenterRadius);
//            int y = mCenterY - (int) (Math.cos(Math.toRadians(childViewAngel)) * mItemCenterRadius);
//            mPointCenterList.add(new Point(x, y));
//            int left = x - childView.getMeasuredWidth() / 2;
//            int top = y - childView.getMeasuredHeight() / 2;
//            int right = x + childView.getMeasuredWidth() / 2;
//            int bottom = y + childView.getMeasuredHeight() / 2;
//            childView.layout(left, top, right, bottom);
//            mItemRectList.add(new Rect(left, top, right, bottom));
//            Collections.sort(mItemRectList, (o1, o2) -> Integer.compare(o1.top, o2.top));
//        }
//    }
//
//    @Override
//    protected void onDraw(Canvas canvas) {
//        super.onDraw(canvas);
//        if (mBitmapWheel != null) {
//            if (mWeelPaint == null) {
//                mWeelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
//                mWeelPaint.setAlpha(100);
//            }
//            if (mBitmapWheelSrc == null) {
//                mBitmapWheelSrc = new Rect(0, 0, mBitmapWheel.getWidth(), mBitmapWheel.getHeight());
//            }
//            if (mBitmapWheelDst == null) {
//                mBitmapWheelDst = new Rect(getWidth() - mBitmapWheel.getWidth(), 0, getWidth(), getHeight());
//            }
//            canvas.drawBitmap(mBitmapWheel, mBitmapWheelSrc, mBitmapWheelDst, mWeelPaint);
//        }
//        //测试辅助线
////        Paint paint = new Paint();
////        paint.setColor(Color.GREEN);
////        paint.setAlpha(120);
////        paint.setStrokeWidth(2f);
////        paint.setStyle(Paint.Style.STROKE);
////        canvas.drawCircle(mCenterX, mCenterY, mOutWheelRadius, paint);
////        canvas.drawCircle(mCenterX, mCenterY, mInWheelRadius, paint);
////        paint.setColor(Color.RED);
////        canvas.drawCircle(mCenterX, mCenterY, mItemImgCenterRadius, paint);
////        for (Point point : mPointCenterList) {
////            canvas.drawCircle(point.x, point.y, 5, paint);
////        }
////        paint.setColor(Color.YELLOW);
////        paint.setAlpha(40);
////        for (Rect rect : mItemRectList) {
////            canvas.drawRect(rect, paint);
////        }
//    }
//
//
//    @Override
//    public boolean dispatchTouchEvent(MotionEvent ev) {
//        switch (ev.getAction()) {
//            case MotionEvent.ACTION_DOWN:
//                mDownY = ev.getY();
//                mLastY = ev.getY();
//                super.dispatchTouchEvent(ev);
//                return true;
//            case MotionEvent.ACTION_MOVE:
//                if (!isScrolling && Math.abs(ev.getY() - mLastY) > 50) {
//                    isScrolling = true;
//                    float offSetY = 0;
//                    mLastY = ev.getY();
//                    angel += offSetY / 20;
//                    requestLayout();
////                    refreshList();
//                    return true;
//                } else if (isScrolling) {
//                    float offSetY = ev.getY() - mLastY;
//                    mLastY = ev.getY();
//                    if ((angel + offSetY / 20) < ((mDatas.size() - 1) * -intervalAngel)) {
//                        angel = (mDatas.size() - 1) * -intervalAngel;
//                    } else if ((angel + offSetY / 20) > 0) {
//                        angel = 0;
//                    } else {
//                        angel += offSetY / 20;
//                    }
////                    Log.i(TAG, "ACTION_MOVE angle =" + angel);
//                    requestLayout();
////                    refreshList();
//                    return true;
//                }
//                return super.dispatchTouchEvent(ev);
//            case MotionEvent.ACTION_UP:
//                boolean notDispatch = isScrolling;
//                isScrolling = false;
//                if (mOnAngleSelectListener != null && Math.abs(ev.getY() - mDownY) > 22) {
//                    int selectPosition = getSelectPosition();
//                    if (selectPosition != -1) {
////                        setPosition(selectPosition);
//                        mOnAngleSelectListener.onAngleSelect(CircleListView.this, selectPosition);
//                        refreshList();
//                    }
//                }
//                if (notDispatch) {
//                    return false;
//                } else {
//                    performClick();
//                    return super.dispatchTouchEvent(ev);
//                }
//            default:
//                isScrolling = false;
//                return super.dispatchTouchEvent(ev);
//        }
//    }
//
//    public int getSelectPosition() {
//        return (int) Math.abs(angel / intervalAngel);
//    }
//
//
//    private boolean mIsItemClick = false;
//
//    protected void refreshList() {
//        removeAllViews();
//        for (int i = 0; i < mDatas.size(); i++) {
//            if (i == 0 && angel < -intervalAngel * (mDatas.size() - 1)) {
//                angel = -intervalAngel * (mDatas.size() - 1);
//            }
//            final int position = i;
//            int selectPosition = getSelectPosition();
//            View view = LayoutInflater.from(getContext()).inflate(mMenuItemLayoutId, this, false);
//            ImageView iv = view.findViewById(R.id.id_circle_menu_item_image);
//            TextView tv = view.findViewById(R.id.id_circle_menu_item_text);
//            if (iv != null) {
//                if (i == selectPosition) {
//                    iv.setAlpha(1f);
//                    iv.getLayoutParams().width = 130;
//                    iv.getLayoutParams().height = 130;
//                } else {
//                    iv.setAlpha(0.6f);
//                    iv.getLayoutParams().width = 100;
//                    iv.getLayoutParams().height = 100;
//                }
//                iv.setImageBitmap(mDatas.get(i).getBitmap());
//            }
//            if (tv != null) {
//                if (i == selectPosition) {
//                    tv.setAlpha(1f);
//                } else {
//                    tv.setAlpha(0.6f);
//                }
//                tv.setText(mDatas.get(i).getDesc());
//            }
//            view.setOnClickListener(v -> {
//                mIsItemClick = true;
//                if (mOnItemClickListener != null) {
//                    mOnItemClickListener.onItemClick(CircleListView.this, position);
//                }
//                //设置到居中
//                setPosition(position);
//                refreshList();
//            });
//            addView(view);
//            if (mDatas.size() == 1) {
//                setPosition(0);
//            }
//        }
//        invalidate();
//    }
//
//    protected void setPosition(int position) {
//        angel = -position * intervalAngel;
//        requestLayout();
//    }
//
//
//    private OnItemClickListener mOnItemClickListener;
//    private OnAngleSelectListener mOnAngleSelectListener;
//
//    public interface OnItemClickListener {
//        void onItemClick(CircleListView parent, int position);
//    }
//
//    public void setOnWheelItemClickListener(OnItemClickListener listener) {
//        mOnItemClickListener = listener;
//    }
//
//    public interface OnAngleSelectListener {
//        void onAngleSelect(CircleListView parent, int position);
//    }
//
//    public void setOnAngleSelectListener(OnAngleSelectListener listener) {
//        mOnAngleSelectListener = listener;
//    }
//}
